﻿סקירה
========

» Note|הערה: בכדי לבצע את הפעולות בחלקים הבאים יש לעבוד עם Yii 1.1 ומעלה. התמיכה בבדיקות קיימת רק מגרסאות 1.1 ומעלה. למרות, שאין זה אומר שאינכם יכולים לבדוק את האפליקציות שלכם שפותחו בעזרת Yii 1.0. ישנם עשרות כלים שתוכלו להעזר בהם בכדי לבצע בדיקות על גבי האפליקציה, כמו לדוגמא [PHPUnit](http://www.phpunit.de/), [SimpleTest](http://www.simpletest.org/).

בדיקות הן תהליך הכרחי בפיתוח תוכנה. בין אם אנו מודעים לזה או לא, אנו מבצעים בדיקות כל הזמן בזמן שאנו מפתחים אפליקציה. לדוגמא, כשאנו כותבים מחלקה ב PHP, אנו משתמשים בביטויים כמו `echo` או `die` בכדי לראות אם הקוד שכתבנו עובד כמו שצריך; כשאנו מיישמים עמוד כלשהו המכיל קוד HTML מורכב, אנו יכולים להכניס בדיקות שונות בכדי לדעת אם העמוד מתקשר עמנו כצפוי או לא. מפתחים מתקדמים יותר בדרך כלל כותבים קוד מסויים שמבצע את התהליך הזה אוטומטית כדי שבכל פעם שהם צריכים לבדוק משהו, הם צריכים רק לכתוב את הקוד ולתת למחשב לבצע את פעולות הבדיקה. זה ידוע בשם *בדיקות אוטומטיות*, שזהו הנושא העיקרי של חלק זה.

התמיכה בבדיקות שמגיע עם Yii כוללת *בדיקות יחידה* ו *בדיקות פונקציונליות*.

בדיקות יחידה מאמתות שיחידה אחת בקוד עובדת כמו שצריך. בתכנות מונחה עצמים, יחידת הקוד הבסיסית ביותר הינה מחלקה. לכן בדיקות היחידה צריכות לאמת שכל המתודות במחלקה עובדות כמו שצריך. זאת, לאחר שהמתודה מקבלת פרמטרים שונים היא צריכה לבדוק שהיא מחזירה תוצאה נכונה. בדיקות יחידה בדרך כלל נכתבות על ידי אותם מפתחים הכותבים את המחלקה.

בדיקה פונקציונלית בדרך כלל בודקת שאפשרות מסויימת (לדוגמא ניהול הודעות במערכת בלוגים) עובדת כמו שצריך. בהשוואה לבדיקת יחידה, בדיקה פונקציונלית יושבת ברמה גבוהה יותר מאחר והאפשרות הנבדקת בדרך כלל מכילה כמה מחלקות. בדיקות פונקציונליות בדרך כלל נכתבות על ידי משתמשים שיודעים טוב מאוד את דרישות המערכת (בין אם זה המפתחים או מהנדסים).

פיתוח מונחה-בדיקות
=======================

למטה מופיעה רשימה של תהליך הפיתוח במה שנקרא [פיתוח מונחה-בדיקות](http://he.wikipedia.org/wiki/%D7%A4%D7%99%D7%AA%D7%95%D7%97_%D7%9E%D7%95%D7%A0%D7%97%D7%94_%D7%91%D7%93%D7%99%D7%A7%D7%95%D7%AA) :

1. יצירת בדיקה חדשה המכסה אפשרות ליישום. הבדיקה צריכה להכשל בהרצה הראשונה שלה מאחר והאפשרות עדיין לא קיימת.
2. הרץ את כל הבדיקות וודא שהבדיקה החדשה תכשל.
3. כתוב קוד כדי שהבדיקה החדשה שנוצר לא תכשל.
4. הרץ את כל הבדיקות וודא שהם כולם עובדות כמו שצריך.
5. בדוק/כתוב מחדש את הקוד שנכתב לאחרונה והרץ שוב את כל הבדיקות וודא שכולם עובדות כמו שצריך.

חזור על השלבים 1-5 בכדי להגיע לסיום יישום האפשרות החדשה.

הגדרת סביבת בדיקות
======================

הבדיקות הנתמכות ב Yii דורשות [PHPUnit](http://www.phpunit.de/) 3.3+ ו [Selenium Remote Control](http://seleniumhq.org/projects/remote-control/) 1.0+. אנא קראה את הדוקומנטציה שלהם בכדי לדעת כיצד להתקין אותם.

לאחר מכן אנו נשתמש בכלי `yiic webapp` במסוף בכדי ליצור אפליקציה חדשה, הכלי יצור את הקבצים והתיקיות הבאות בכדי שאנו נוכל לבצע בדיקות:

~~~
testdrive/
   protected/                מכיל קבצים מוגנים של האפליקציה
      tests/                 מכיל בדיקות לאפליקציה
         fixtures/           מכיל טבלאות קבועות למסד נתונים
         functional/         מכיל בדיקות פונקציונליות
         unit/               מכיל בדיקות יחידה
         report/             מכיל דוחות בדיקה
         bootstrap.php       הסקריפט שרץ בהתחלה
         phpunit.xml         קובץ הגדרות של PHPUnit
         WebTestCase.php     מחלקת הבסיס לכל הבדיקות באפליקציה
~~~

כפי שמוצג למעלה, קוד הבדיקות שנכתוב ימוקם בדרך כלל באחת משלושת התיקיות: `fixtures`, `functional` ו `unit`, והתיקיה `report` יכיל את הדוחות של הבדיקות שנעשו.

בכדי להריץ בדיקות (בין אם זה בדיקות יחידה או פונקציונליות), אנו יכולים להריץ את הפקודות הבאות בחלון המסוף:

~~~
% cd testdrive/protected/tests
% phpunit functional/PostTest.php    // הרצת בדיקה אחת
% phpunit --verbose functional       // הרצת כל הבדיקות תחת 'functional'
% phpunit --coverage-html ./report unit
~~~

בקוד למעלה, הפקודה האחרונה תריץ את כל הבדיקות הנמצאות בתיקיה `unit` ותיצור דוח בתוך התיקיה `report`. יש לדעת שבכדי שיווצר דוח אודות הבדיקה יש להתקין ולהפעיל את התוסף [xdebug ](http://www.xdebug.org/).


סקריפט ההתחלה של הבדיקות
====================

בואו נבדוק מה יכול להיות בתוך קובץ ה `bootstrap.php`. קובץ זה חשוב מאחר והוא דומה לקובץ [הכניסה הראשי](/doc/guide/basics.entry) והוא נקודת ההתחלה בכל פעם שאנו מריצים בדיקות.

~~~
[php]
$yiit='path/to/yii/framework/yiit.php';
$config=dirname(__FILE__).'/../config/test.php';
require_once($yiit);
require_once(dirname(__FILE__).'/WebTestCase.php');
Yii::createWebApplication($config);
~~~

בקוד למעלה, אנו קודם מצרפים את הקובץ `yiit.php` מהתיקיה של הפריימוורק, אשר מגדירה ערכים גלובליים ומוסיפה את מחלקות הבסיס הנחוצות. לאחר מכן אנו יוצרים אובייקט של אפליקצית ווב בעזרת קובץ ההגדרות `test.php`. אם נבדוק את קובץ ה `test.php`, אנו נראה שהוא יורש מקובץ ההגדרות `main.php` ומוסיף רכיב אפליקציה בשם `fixture` שמחלקתו הינה [CDbFixtureManager]. אנו נסביר אודות אפשרות זו בחלק הבא.
ֿ
~~~
[php]
return CMap::mergeArray(
    require(dirname(__FILE__).'/main.php'),
    array(
        'components'=»array(
            'fixture'=»array(
                'class'=»'system.test.CDbFixtureManager',
            ),
            /* הסר הערה זו בכדי להגדיר מסד נתונים לבדיקות
            'db'=»array(
                'connectionString'=»'DSN for test database',
            ),
            */
        ),
    )
);
~~~

כשאנו מריצים בדיקות המערבות מסד נתונים, מומלץ להגדיר מסד נתונים לצרכי בדיקה בלבד בכדי שהבדיקות לא יפריעו לפעילויות בזמן תהליך הפיתוח או תהליך התפוקה. בכדי לבצע זאת, אנו צריכים להסיר את ההערה מסביב להגדרות ה `db` בקוד המוצג למעלה ולהגדיר את המאפיין `connectionString` עם ה DSN המתאים למסד הנתונים בו אנו משתמשים.

בעזרת קובץ סקריפט זה, כשאנו מריצים בדיקות יחידה, אנו נקבל אובייקט של האפליקציה שהוא כמעט זהה לאובייקט שרץ לאפליקצית הווב. ההבדל היחידי הוא שהוא משתמש באפשרות של `fixtures` והוא משתמש במסד נתונים לצרכי בדיקה.

«div class="revision"»$Id: test.overview.txt 1813 2010-02-18 21:33:16Z qiang.xue $«/div»